CSSçžå¯Ÿè²æ§æãšOKLCHè²ç©ºéã®åãæ¢æ±ãããŠã§ãéçºã«ãããæ£ç¢ºã§ã¢ã¯ã»ã·ãã«ãªè²åœ©æäœãå®çŸããŸãã
CSSçžå¯Ÿè²æ§æãšOKLCHïŒçŸä»£ã®è²åœ©æäœãžã®è©³çŽ°ãªæ¢æ±
è²ã¯ãŠã§ãäžã®ããžã¥ã¢ã«ã³ãã¥ãã±ãŒã·ã§ã³ã®åºæ¬ã§ããé·å¹Žã«ãããããŠã§ãéçºè ã¯CSSã§è²ãå®çŸ©ã»æäœããããã«ãRGBãHSLãHexã³ãŒããšãã£ãã«ã©ãŒã¢ãã«ã«äŸåããŠããŸããããããã®ã¢ãã«ã¯äŸ¿å©ã§ãããç¹ã«èª¿åã®ãšããã«ã©ãŒãã¬ãããäœæããããã¢ã¯ã»ã·ããªãã£ã®ããã«åŸ®åŠãªèª¿æŽãè¡ã£ããããéã«ãçŽæçãªå¶åŸ¡ãé£ããããšããããããŸãããããã§ç»å Žããã®ããCSSçžå¯Ÿè²æ§æãšOKLCHè²ç©ºéã§ãããããã¯ãè²åœ©æäœã«å¯ŸããŠåäŸã®ãªãå¶åŸ¡ãšç²ŸåºŠãæäŸãã匷åãªããŒã«ã§ãã
CSSçžå¯Ÿè²æ§æãšã¯ïŒ
CSSçžå¯Ÿè²æ§æïŒRCSïŒã¯ãæ¢åã®è²ãCSSå ã§çŽæ¥å€æŽããæ°ããæ¹æ³ãå°å ¥ããŸããæ°ããè²ã®å€ãæåã§èšç®ããããããªããã»ããµã«é Œã£ãããã代ããã«ãRCSã§ã¯å ã®è²ã®æ§æèŠçŽ ã«åºã¥ããŠè²ã®å€æãå®çŸ©ã§ããŸããããã«ãããè²ã®ããªãšãŒã·ã§ã³äœæãå€§å¹ ã«ç°¡çŽ åãããCSSã®ä¿å®æ§ãåäžããŸãã
ããã¯ããã®è²ãããå°ãæããããããããã®è²ã®åœ©åºŠã20%äžããããšãã£ãæç€ºãåºãæ¹æ³ã ãšèããŠãã ããããã®æ§æã§ã¯fromããŒã¯ãŒãã䜿ã£ãŠåºæºãšãªãè²ãæå®ãããã®åŸcalc()ã®ãããªããªãã¿ã®CSS颿°ã䜿ã£ãŠåã
ã®æ§æèŠçŽ ã倿Žã§ããŸãã
åºæ¬æ§æïŒ
color: color(from );
äŸïŒ
:root {
--primary-color: #007bff; /* A standard blue */
}
.button {
background-color: var(--primary-color);
color: color(from var(--primary-color) lightness(+20%)); /* A lighter shade of blue */
}
.button:hover {
background-color: color(from var(--primary-color) lightness(-10%)); /* A slightly darker shade of blue on hover */
}
ãã®äŸã§ã¯ãåºæºè²ïŒ--primary-colorïŒãããšã«ããã¿ã³ã®èæ¯è²ãšãããŒç¶æ
ã®ããªãšãŒã·ã§ã³ãäœæããŠããŸããlightness(+20%)ãšlightness(-10%)ã¯ãåºæºè²ã®æåºŠæåã倿Žããããããããæããè²åããšããæãè²åããçæããŸããããã«ãããåºæºè²ãžã®å€æŽããã¹ãŠã®äŸåããè²ã«èªåçã«åæ ããããã¶ã€ã³ã·ã¹ãã ãããå
ç¢ã§ç®¡çãããããªããŸãã
OKLCHè²ç©ºéã®ç޹ä»
RCSã¯è²ãä¿®æ£ããããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸããããããã®ä¿®æ£ã®å¹æã¯ãåºç€ãšãªãè²ç©ºéã«å€§ããäŸåããŸããäžè¬çã«äœ¿çšãããŠããRGBãHSLã«ã¯ãç¥èŠçåäžæ§ã®åé¡ããããŸãããããã®è²ç©ºéã§æ°å€ãçãã倿ŽããŠããå¿ ãããç¥èŠãããè²ã®å€åãçãããªããšã¯éããŸããã
OKLCHã¯ããã®åé¡ã«å¯ŸåŠããããã«èšèšãããç¥èŠçã«åäžãªè²ç©ºéã§ããCIELABè²ç©ºéãããŒã¹ã«ããŠããŸãããåç座æšã䜿çšããŠããããã人éã«ãšã£ãŠããçŽæçã«æ±ãããšãã§ããŸããOKLCHã¯ä»¥äžã®ç¥ã§ãïŒ
- L: LightnessïŒæåºŠã0-100ïŒ- è²ã®ç¥èŠçãªæããã
- C: ChromaïŒåœ©åºŠã0-çŽ0.4ïŒ- è²ã®ç¥èŠçãªé®®ãããã飜å床ã
- H: HueïŒè²çžã0-360ïŒ- è²çžç°ã«ãããè²ã®äœçœ®ã瀺ãè§åºŠïŒäŸïŒèµ€ãç·ãéïŒã
OKLCHã®äž»ãªå©ç¹ã¯ãLãCãHã®å€ãçãã倿ŽãããšãæåºŠã圩床ãè²çžã®ç¥èŠçãªå€åãã»ãŒçãããªãããšã§ããããã«ãããäºæž¬å¯èœã§èª¿åã®ãšããã«ã©ãŒãã¬ãããã¯ããã«ç°¡åã«äœæã§ããŸãã
ãªãç¥èŠçåäžæ§ãéèŠãªã®ãïŒ
ããŸããŸãªæåºŠã®ãã¿ã³ã«ã©ãŒã»ãããäœæããããšæ³åããŠã¿ãŠãã ãããHSLã䜿çšããŠåãã¿ã³ã®æåºŠã10%ãã€å¢ãããå Žåãäžéšã®ãã¿ã³ãä»ã®ãã¿ã³ãããèããæããèŠããããšããããŸããããã¯ãHSLãç¥èŠçã«åäžã§ã¯ãªããç¥èŠãããæããã®å€åãç¹å®ã®è²çžã«ãã£ãŠç°ãªãããã§ãã
OKLCHã䜿çšãããšãæåºŠã®å€ã10å¢ããããšã§ããã¹ãŠã®è²çžã«ããã£ãŠãããäžè²«æ§ã®ããç¥èŠçãªæããã®å€åãåŸãããŸããããã¯ãã¢ã¯ã»ã·ãã«ã§èŠèŠçã«é åçãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãäœæããããã«éåžžã«éèŠã§ãã
çžå¯Ÿè²æ§æãšOKLCHã®çµã¿åãã
RCSã®ç䟡ã¯ãOKLCHè²ç©ºéãšçµã¿åãããããšã§çºæ®ãããŸãããã®çµã¿åããã«ãããé«ã粟床ãšäºæž¬å¯èœæ§ãæã£ãŠè²ãæäœã§ããããäžè²«æ§ãããèŠèŠçã«çŸãããã¶ã€ã³ãå®çŸããŸãã
äŸïŒOKLCHãšRCSã䜿çšããåè²ã«ã©ãŒãã¬ããã®äœæ
:root {
--base-color: oklch(60% 0.2 240); /* A slightly desaturated blue-purple */
--color-light: color(from var(--base-color) lightness(+20%));
--color-dark: color(from var(--base-color) lightness(-20%));
}
.element {
background-color: var(--base-color);
color: var(--color-light);
border: 1px solid var(--color-dark);
}
ãã®äŸã§ã¯ãOKLCH圢åŒã§åºæºè²ãå®çŸ©ããŠããŸããæ¬¡ã«ãRCSã䜿çšããŠãæåºŠæåã調æŽããããšã§ãããæããããªãšãŒã·ã§ã³ãšããæãããªãšãŒã·ã§ã³ãäœæããŸããOKLCHã¯ç¥èŠçã«åäžã§ããããããããã®ããªãšãŒã·ã§ã³ã¯åºæºè²ãšã®éã§äžè²«ããç¥èŠçãªæããã®å·®ãæã¡ãèŠèŠçã«èª¿åã®ãšããåè²ãã¬ãããçãŸããŸãã
å®çšçãªå¿çšãšãŠãŒã¹ã±ãŒã¹
RCSãšOKLCHã®çµã¿åããã¯ããŠã§ãéçºã«ãããè²åœ©æäœã®å¹ åºãå¯èœæ§ãåãéããŸãã以äžã«ããã€ãã®å®çšçãªå¿çšäŸãæããŸãïŒ
1. ã¢ã¯ã»ã·ãã«ãªã«ã©ãŒããŒãã®æ§ç¯
ã¢ã¯ã»ã·ããªãã£ã¯ãŠã§ãéçºã®éèŠãªåŽé¢ã§ããOKLCHãšRCSã䜿çšããããšã§ãã«ã©ãŒã³ã³ãã©ã¹ãã«é¢ããã¢ã¯ã»ã·ããªãã£ã¬ã€ãã©ã€ã³ãæºããã«ã©ãŒããŒããç°¡åã«äœæã§ããŸãã
äŸïŒããã¹ããšèæ¯ã®éã«ååãªã³ã³ãã©ã¹ãã確ä¿ãã
:root {
--base-background: oklch(95% 0.02 200); /* A very light gray */
--base-text: oklch(20% 0.1 200); /* A dark gray */
--text-on-primary: color(from var(--base-background) lightness(-40%)); /* Darken background for contrast*/
}
body {
background-color: var(--base-background);
color: var(--base-text);
}
.primary-button {
background-color: color(from var(--base-text) lightness(+40%)); /*Lighten text for background */
color: var(--text-on-primary);
}
OKLCHã§è²ãå®çŸ©ããæåºŠæåã調æŽããããšã§ãããã¹ããšèæ¯ã®ã³ã³ãã©ã¹ãæ¯ã蚱容ç¯å²å ã«åãŸãããã«ã§ããèŠèŠé害ã®ãããŠãŒã¶ãŒã«ãšã£ãŠãŠã§ããµã€ãã®ã¢ã¯ã»ã·ããªãã£ãåäžããŸãããªã³ã©ã€ã³ã®ã«ã©ãŒã³ã³ãã©ã¹ããã§ãã«ãŒã®ãããªããŒã«ã¯ãWCAGã¬ã€ãã©ã€ã³ãžã®æºæ ã確èªããã®ã«åœ¹ç«ã¡ãŸãã
2. ãŠãŒã¶ãŒã®å¥œã¿ã«åºã¥ãåçãªè²èª¿æŽ
çŸä»£ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã©ãŠã¶ã§ã¯ããŠãŒã¶ãŒã奜ã¿ã®ã«ã©ãŒã¹ããŒã ïŒã©ã€ããŸãã¯ããŒã¯ïŒãæå®ã§ããããšããããããŸããCSSã¡ãã£ã¢ã¯ãšãªãšRCS/OKLCHã䜿çšããããšã§ããŠãŒã¶ãŒã®å¥œã¿ã«åãããŠãŠã§ããµã€ãã®è²ãåçã«èª¿æŽã§ããŸãã
äŸïŒããŒã¯ã¢ãŒãã®å®è£
:root {
--base-color: oklch(60% 0.2 240);
--background-color: oklch(95% 0.02 200); /* Light background */
--text-color: oklch(20% 0.1 200); /* Dark text */
}
body {
background-color: var(--background-color);
color: var(--text-color);
}
@media (prefers-color-scheme: dark) {
:root {
--background-color: oklch(20% 0.02 200); /* Dark background */
--text-color: oklch(95% 0.1 200); /* Light text */
--base-color: color(from var(--base-color) lightness(+20%)); /* Adjust base color for dark mode */
}
}
ãã®äŸã§ã¯ãããã©ã«ãã®ã©ã€ãã¢ãŒãã®ã«ã©ãŒã¹ããŒã ãå®çŸ©ããŠããŸãããŠãŒã¶ãŒãããŒã¯ã«ã©ãŒã¹ããŒã ã奜ãå Žåãã¡ãã£ã¢ã¯ãšãªãäœåããèæ¯è²ãšããã¹ãã«ã©ãŒãæŽæ°ãããŸãããŸããRCSã䜿çšããŠ--base-colorã調æŽããããŒã¯ã¢ãŒãã®æèã§ãèŠèŠçã«é
åçã§ããç¶ããããã«ããŸãããã®åçãªèª¿æŽã«ããããŠãŒã¶ãŒã奜ãã«ã©ãŒã¹ããŒã ã«é¢ããããèŠèŠçã«å¿«é©ãªã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸãã
3. ãã¶ã€ã³ã·ã¹ãã çšã®ã«ã©ãŒãã¬ããäœæ
ãã¶ã€ã³ã·ã¹ãã ã¯ãäžè²«æ§ã®ããæç¢ºã«å®çŸ©ãããã«ã©ãŒãã¬ããã«äŸåããŠããŸããOKLCHãšRCSã¯ããããã®ãã¬ããã®çæãšç®¡çã容æã«ããŸãã
äŸïŒããŸããŸãªè²çžãæã€ã«ã©ãŒãã¬ããã®çæ
:root {
--primary-hue: 240; /* Base hue (blue) */
--primary-color: oklch(60% 0.2 var(--primary-hue));
--secondary-hue: calc(var(--primary-hue) + 60); /* Shift hue by 60 degrees */
--secondary-color: oklch(60% 0.2 var(--secondary-hue));
--tertiary-hue: calc(var(--primary-hue) + 120); /* Shift hue by 120 degrees */
--tertiary-color: oklch(60% 0.2 var(--tertiary-hue));
}
åºæºãšãªãè²çžãå®çŸ©ããæ¬¡ã«calc()ã䜿çšããŠããªãšãŒã·ã§ã³ãçæããããšã§ãäžè²«ããè²çžå·®ãæã€ã«ã©ãŒãã¬ãããäœæã§ããŸãããŸããæåºŠãšåœ©åºŠã®å€ã調æŽããŠãã¬ããã埮調æŽããèŠèŠçãªèª¿åã確ä¿ããããšãã§ããŸãããã®ã¢ãããŒãã¯ããã¶ã€ã³ã·ã¹ãã å
ã§ã®è€éãªã«ã©ãŒãã¬ããã®äœæãšä¿å®ãç°¡çŽ åãããŠã§ããµã€ããã¢ããªã±ãŒã·ã§ã³å
šäœã§ã®äžè²«æ§ãä¿é²ããŸãã
4. ç»åã®åçãªè²ä»ã
ç¹å®ã®è²ã®æ¿æ·¡ãç»åã«ä»ããŠããŠã§ããµã€ãã®ãã¶ã€ã³ã«ã·ãŒã ã¬ã¹ã«çµ±åããããšæ³åããŠã¿ãŠãã ãããCSSã®ãã¬ã³ãã¢ãŒããOKLCHãRCSãšçµã¿åãããããšã§ããããå®çŸã§ããŸãã
.tinted-image {
background-image: url("image.jpg");
background-color: oklch(50% 0.2 120); /* Base tint color (green) */
background-blend-mode: multiply;
}
.tinted-image.blue {
background-color: oklch(50% 0.2 240); /* Base tint color (blue) */
}
background-blend-modeãmultiplyã«èšå®ããããšã§ãç»åã¯æå®ãããèæ¯è²ã§è²ä»ããããŸããOKLCHã䜿çšãããšãè²åãã®æ¿æ·¡ã®è²çžãšæåºŠãç°¡åã«èª¿æŽããŠãç®çã®å¹æãåŸãããšãã§ããŸãããŠãŒã¶ãŒã®æäœããã®ä»ã®èŠå ã«åºã¥ããŠRCSã䜿çšããŠåçãªè²ã®ããªãšãŒã·ã§ã³ãäœæããããšãå¯èœã§ãã
ãã©ãŠã¶ã®ãµããŒããšããªãã£ã«
CSSçžå¯Ÿè²æ§æãšOKLCHã®ãã©ãŠã¶ãµããŒãã¯çµ¶ããæ¹åãããŠããŸãã2024幎åŸåçŸåšãã»ãšãã©ã®ã¢ãã³ãã©ãŠã¶ã¯RCSãšOKLCHããµããŒãããŠããŸããã察象ãšãªããªãŒãã£ãšã³ã¹ãã«ããŒã§ããŠããã確èªããããã«ãCan I Useã®ãããªãªãœãŒã¹ã§äºææ§ããŒãã«ã確èªããããšãäžå¯æ¬ ã§ãã
ãã€ãã£ããµããŒãããªãå€ããã©ãŠã¶ã«ã¯ãããªãã£ã«ã䜿çšããŠäžè¶³ããŠããæ©èœãæäŸã§ããŸãããããã®ããªãã£ã«ã¯éåžžãJavaScriptã䜿çšããŠRCSãšOKLCHã®åäœããšãã¥ã¬ãŒãããŸãããã ããããªãã£ã«ã¯ãŠã§ããµã€ãã«ãªãŒããŒãããã远å ããå¯èœæ§ãããããã€ãã£ãã®åäœãå®å šã«åçŸã§ããªãå Žåãããããšã«æ³šæããŠãã ããã
ãã¹ããã©ã¯ãã£ã¹ãšèæ ®äºé
RCSãšOKLCHã¯å€§ããªå©ç¹ãæäŸããŸãããããããè³¢æã«äœ¿çšãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšãéèŠã§ãïŒ
- CSS倿°ã®äœ¿çšïŒ åºæºè²ãCSS倿°ãšããŠå®çŸ©ããã«ã©ãŒãã¬ããã®ç®¡çãšæŽæ°ã容æã«ããŸãã
- ã¢ã¯ã»ã·ããªãã£ã®åªå ïŒ ã¢ã¯ã»ã·ããªãã£ã確ä¿ãããããåžžã«ããã¹ããšèæ¯ã®ã«ã©ãŒã³ã³ãã©ã¹ãæ¯ã確èªããŸãã
- 培åºçãªãã¹ãïŒ ç°ãªããã©ãŠã¶ãããã€ã¹ã§ãŠã§ããµã€ãããã¹ãããäžè²«ããè²ã®ã¬ã³ããªã³ã°ã確ä¿ããŸãã
- ã«ã©ãŒã·ã¹ãã ã®ææžåïŒ ã«ã©ãŒãã¬ãããšãRCSã䜿çšããŠããªãšãŒã·ã§ã³ãçæããæ¹æ³ãæç¢ºã«ææžåããŸãã
- ããã©ãŒãã³ã¹ã®èæ ®ïŒ ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããããè€éãªè²èšç®ã®é床ãªäœ¿çšã¯é¿ããŸãã
- ãã©ãŒã«ããã¯æŠç¥ïŒ RCSãOKLCHããµããŒãããªããã©ãŠã¶ã®ããã«ããã©ãŒã«ããã¯ã®è²ã®å€ãæäŸããŸããããã«ã¯ãRCS/OKLCHã®å®çŸ©ã«å ããŠ16鲿°ã³ãŒããæå®ããããšãå«ãŸããŸãã
äžçäžã®äºäŸ
äžçäžã®ãã¶ã€ã³ã·ã¹ãã ããŠã§ããµã€ãããããè¯ãã«ã©ãŒç®¡çã®ããã«RCSãšOKLCHã®æ¡çšãå§ããŠããŸãã以äžã«ããã€ãã®æ¶ç©ºã®äŸãæããŸãïŒ
- Eã³ããŒã¹ãµã€ãïŒã°ããŒãã«ïŒïŒ Eã³ããŒã¹ãã©ãããã©ãŒã ã¯ãååç»ååºæã®è²ã«é¢ããããããŸããŸãªååã«ããŽãªã§äžè²«ããè²è¡šçŸã確ä¿ããããã«OKLCHã䜿çšã§ããŸããçžå¯Ÿè²æ§æã¯ããŠãŒã¶ãŒãéžæããå šäœçãªããŒãïŒäŸïŒå€éé²èЧçšã®ããŒã¯ã¢ãŒãããŒãïŒã«åºã¥ããŠãã¿ã³ã®è²ãåçã«èª¿æŽããããã«äœ¿çšã§ããŸãã
- ãã¥ãŒã¹ããŒã¿ã«ïŒåœéïŒïŒ åœéçãªãã¥ãŒã¹ããŒã¿ã«ã¯ãããŸããŸãªã»ã¯ã·ã§ã³ïŒäŸïŒæ¿æ²»ãã¹ããŒããéèïŒã衚ãããã«ç°ãªãã«ã©ãŒããŒãã䜿çšãããããããŸãããRCSã¯ãåäžã®åºæºè²ãããããã®ããŒããçæããã³ã³ãã³ããåºå¥ããªããèŠèŠçãªäžè²«æ§ã確ä¿ããããã«äœ¿çšã§ããŸãããããã®ããŒãã®ã¢ã¯ã»ã·ããªãã£ã¯ãOKLCHã®è²å®çŸ©ã䜿çšããWCAGã³ã³ãã©ã¹ããã§ãã¯ã«ãã£ãŠç¢ºä¿ã§ããŸãã
- æè²ãã©ãããã©ãŒã ïŒå€èšèªïŒïŒ è€æ°ã®èšèªããµããŒããããªã³ã©ã€ã³åŠç¿ãã©ãããã©ãŒã ã¯ãåèšèªã®æåçæèã«åºã¥ããŠã«ã©ãŒãã¬ããã調æŽããããã«RCSã䜿çšã§ããŸããäŸãã°ãç¹å®ã®è²ã¯æåã«ãã£ãŠç°ãªãæå³åããæã€ããšããããRCSã¯ãããã®æåçãªãã¥ã¢ã³ã¹ã«åãããŠã«ã©ãŒã¹ããŒã ã埮åŠã«ä¿®æ£ããããã«äœ¿çšã§ããŸãã
çµè«
CSSçžå¯Ÿè²æ§æãšOKLCHè²ç©ºéã¯ããŠã§ãéçºã«ããã倧ããªé²æ©ã§ãããè²åœ©æäœã«å¯ŸããŠåäŸã®ãªãå¶åŸ¡ãšç²ŸåºŠãæäŸããŸããç¥èŠçåäžæ§ã®ååãçè§£ããRCSã®åãæŽ»çšããããšã§ãããã¢ã¯ã»ã·ãã«ã§äžè²«æ§ããããèŠèŠçã«é åçãªãã¶ã€ã³ãäœæã§ããŸãããã©ãŠã¶ã®ãµããŒããåäžãç¶ããã«ã€ããŠããããã®ããŒã«ã¯çŸä»£çã§æŽç·ŽããããŠã§ãäœéšãæ§ç¯ããããã«ãŸããŸãäžå¯æ¬ ã«ãªãã§ãããããããã®æ°ããæ©èœã掻çšããããªãã®è²åœ©ã¹ãã«ã次ã®ã¬ãã«ã«åŒãäžããŠãã ããïŒ
ææ°ã®ãã©ãŠã¶äºææ§æ å ±ãåžžã«ææ¡ãããªã³ã©ã€ã³ã§å©çšå¯èœãªããŸããŸãªãªãœãŒã¹ãæ¢çŽ¢ããŠãCSSã®è²åœ©æäœã«é¢ããçè§£ãæ·±ããããšãå¿ããªãã§ãã ãããããããŒã³ãŒãã£ã³ã°ïŒ